home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Auge 4000 / Auge 4000 #43 (1990-04-23)(Amiga User Gruppe Einzugsgebiet 4000).zip / Auge 4000 #43 (1990-04-23)(Amiga User Gruppe Einzugsgebiet 4000).adf / Hilfen / Anleitung / Code / Batchman.mod < prev    next >
Text File  |  1990-04-11  |  5KB  |  204 lines

  1. (* Copyright 1988 Michal Todorovic *)
  2. (* For non commercial use only.    *)
  3.  
  4. MODULE Batchman;
  5.  
  6. FROM System         IMPORT StackSize, argc;
  7. FROM Strings        IMPORT ConcatString, StringLength;
  8. FROM Intuition      IMPORT WindowPtr, GadgetPtr, 
  9.                            IntuiMessagePtr, IDCMPFlagsSet,
  10.                            ActivateGadget, GadgetUp,
  11.                            Closewindow, RefreshGList,
  12.                            NewSize, StringInfoPtr;
  13. FROM Ports          IMPORT MessagePtr, WaitPort, GetMsg, 
  14.                            ReplyMsg;
  15. FROM TermInOut      IMPORT WriteString, WriteCard, WriteLn;
  16. FROM AmigaDOS       IMPORT Execute;
  17. FROM BatchIntuition IMPORT OpenWin, CloseWin, SetUpGadgets;
  18. FROM SimpleGadgets  IMPORT FreeGadgetList;
  19. FROM DosStuff       IMPORT LongString, ShortString, GetInfo, 
  20.                            MaxGadgets;
  21. FROM SYSTEM         IMPORT ADR, BYTE, ADDRESS;
  22.  
  23. TYPE
  24.   LongStringPtr = POINTER TO LongString;
  25.  
  26.  
  27. VAR
  28.   Win      : WindowPtr;
  29.   Gad      : GadgetPtr;
  30.   Paths    : ARRAY [0..MaxGadgets] OF LongString;
  31.   Names    : ARRAY [0..MaxGadgets] OF ShortString;
  32.   Text     : LongString;
  33.   Memory   : ARRAY [0..MaxGadgets] OF CHAR;
  34.   Num      : CARDINAL;
  35.   Check    : BOOLEAN;
  36.   Top      : INTEGER;
  37.  
  38.  
  39.  
  40. (**********************************************************)
  41. (* Sets up the window and gadgets.                        *)
  42. (* I know it uses all global variables.                   *)
  43. (**********************************************************)
  44. PROCEDURE SetUpIntuition();
  45.  
  46. BEGIN
  47.   Top := 50;
  48.   Gad := SetUpGadgets(Num, Names, Top);
  49.   IF Gad = NIL THEN
  50.     WriteString("\n\nUh Oh... Out of memory!\n\n");
  51.     HALT
  52.   END;
  53.   Top := Top + 14;
  54.   OpenWin(Win, Gad, Top);
  55.   IF Win = NIL THEN
  56.     FreeGadgetList(Gad^);
  57.     WriteString("\n\nUh Oh... Out of memory!\n\n");
  58.     HALT
  59.   END
  60. END SetUpIntuition;
  61.  
  62.  
  63.  
  64. (**********************************************************)
  65. (* Executes the DOS commands.                             *)
  66. (**********************************************************)
  67. PROCEDURE Process(ID        : CARDINAL; 
  68.                   VAR Check : BOOLEAN);
  69.  
  70. VAR
  71.   Command : ARRAY [0..255] OF CHAR;
  72.   X       : CARDINAL;
  73.   Right   : BOOLEAN;
  74.     
  75. BEGIN
  76.   IF ((CAP(Memory[ID])='R') OR (CAP(Memory[ID])='Q')) THEN
  77.     Command := "C:Execute ";
  78.     ConcatString(Command, Paths[ID]);
  79.     ConcatString(Command, " ");
  80.     ConcatString(Command, Text)
  81.   ELSE
  82.     FOR X := 0 TO 100 DO
  83.       Command[X] := Paths[ID][X]
  84.     END;
  85.     ConcatString(Command, " ");
  86.     ConcatString(Command, Text)
  87.   END;
  88.   Right := Execute(ADR(Command), 0, 0);
  89.   Check := (CAP(Memory[ID]) = 'Q');
  90.   WriteLn()
  91. END Process;
  92.  
  93.      
  94.  
  95.  
  96. (**********************************************************)
  97. (* Processes the intuition events                         *)
  98. (**********************************************************)
  99. PROCEDURE ProcessGadgets();
  100.  
  101. VAR
  102.   Check, 
  103.   Dummy      : BOOLEAN;
  104.   MsgPtr     : IntuiMessagePtr;
  105.   Class      : IDCMPFlagsSet;
  106.   CurrentGad,
  107.   StringGad  : GadgetPtr;
  108.   Counter,
  109.   ID         : CARDINAL;
  110.   SPtr       : StringInfoPtr;
  111.   Temp       : LongStringPtr;
  112.  
  113. BEGIN
  114.   Check := FALSE;
  115.   StringGad := Gad;
  116.   (* Find the string gadget. *)
  117.   WHILE (StringGad^.NextGadget <> NIL) DO
  118.     StringGad := StringGad^.NextGadget
  119.   END;
  120.  
  121.   REPEAT
  122.     Dummy  := ActivateGadget(StringGad^,Win^,NIL);
  123.     MsgPtr := WaitPort(Win^.UserPort^);
  124.     LOOP
  125.       IF Win <> NIL THEN
  126.         MsgPtr := GetMsg(Win^.UserPort^)
  127.       ELSE
  128.         EXIT
  129.       END;
  130.       IF (MsgPtr = NIL) THEN 
  131.         EXIT 
  132.       END;
  133.       Class      := MsgPtr^.Class;
  134.       CurrentGad := MsgPtr^.IAddress;
  135.       ReplyMsg(MessagePtr(MsgPtr));
  136.  
  137.       IF (Class = IDCMPFlagsSet{GadgetUp}) THEN
  138.         (* if you pressed a gadget *)
  139.  
  140.         ID   := CurrentGad^.GadgetID;
  141.         SPtr := StringInfoPtr(StringGad^.SpecialInfo);
  142.         Temp := LongStringPtr(SPtr^.Buffer);       
  143.         Text := Temp^;
  144.  
  145.         CloseWin(Win);
  146.         FreeGadgetList(Gad^);
  147.         Win := NIL;
  148.         Gad := NIL;
  149.  
  150.         Process(ID, Check);
  151.  
  152.         IF NOT(Check) THEN
  153.           SetUpIntuition();
  154.           StringGad := Gad;
  155.           (* Find the string gadget. *)
  156.           FOR Counter := 1 TO Num DO
  157.             StringGad := StringGad^.NextGadget
  158.           END;
  159.         END
  160.       ELSIF (Class = IDCMPFlagsSet{Closewindow}) THEN
  161.         (* You want to quit already??!! *)
  162.         Check := TRUE
  163.       ELSIF (Class = IDCMPFlagsSet{NewSize}) THEN
  164.         RefreshGList(Gad^, Win^, NIL, -1)
  165.       ELSE
  166.         (* What intuition event? *)
  167.         EXIT
  168.       END
  169.     END
  170.   UNTIL Check;
  171. END ProcessGadgets;
  172.  
  173.  
  174.  
  175.  
  176.  
  177. (*-------MAIN-------*)
  178. BEGIN
  179.   IF StackSize < 8000D THEN
  180.     WriteString("\n\nStack is too small.  Set to 8000.\n\n");
  181.     HALT
  182.   END;
  183.  
  184.   Check := TRUE;
  185.   Top   := 50;
  186.   Win   := NIL;
  187.   Gad   := NIL;
  188.   Check := GetInfo(Paths, Names, Memory, Num);
  189.   IF Check THEN
  190.     SetUpIntuition();
  191.     ProcessGadgets()
  192.   ELSE
  193.     (* Configuration file syntax boo boo. *)
  194.     WriteString("\n\nError in file on line #");
  195.     WriteCard(Num, 2);
  196.     WriteLn
  197.   END;
  198.  
  199.   CloseWin(Win);
  200.   IF Gad <> NIL THEN
  201.     FreeGadgetList(Gad^)
  202.   END
  203. END Batchman.
  204.